home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / EDITOR / US20DOC.ARJ / SCAN.CMD < prev    next >
OS/2 REXX Batch file  |  1992-06-29  |  14KB  |  651 lines

  1. ;    SCAN.CMD:    MicroEMACS macro for scanning
  2. ;            SPELL.LST from MicroSPELL 2.0
  3. ;            (C)opyright 1987,1992 by Daniel M Lawrence
  4.  
  5. ;*****    Load up the needed procedures *****
  6.  
  7. store-procedure    getnext
  8. ;    Go to the next entry in the spell list
  9.  
  10. *next
  11.     set %line &add #%slist 1
  12.     set %col #%slist
  13.  
  14.     ; user file name?
  15.     !if &equ %line -2
  16.         set %userlist %col
  17.         !goto next
  18.     !endif
  19.  
  20.     ; if we are all done...
  21.     !if &equ %line -1
  22.         set %done TRUE
  23.         !return
  24.     !endif
  25.  
  26.     ; if we are starting a new file.....
  27.     !if &equ %line 0
  28.         set %cfile %col
  29.         write-message &cat &cat "[Reading " %cfile "]"
  30.         find-file %cfile
  31.         set %cbuffer $cbufname
  32.         set %cfnum &add %cfnum 1
  33.         1 next-window
  34.         2 goto-line
  35.         set $curcol 20
  36.         kill-to-end-of-line
  37.         insert-string &cat " " %cfile
  38.         3 next-window
  39.         !goto next
  40.     !endif
  41.  
  42.     ;reset column offset if needed
  43.     !if ¬ &equ %lastline %line
  44.         set %offset 0
  45.     !endif
  46.     set %lastline %line
  47.  
  48.     ;go to it!!!
  49.     set $curline %line
  50.     &add %col %offset forward-character
  51.     set %cwnum &add %cwnum 1
  52. !endm
  53.  
  54. store-procedure get-suggestions
  55.  
  56.     2 next-window
  57.     shell-command &cat &cat "bic -t " %word " > suggest.tmp"
  58.     set $gflags &bor $gflags 2
  59.     beginning-of-file
  60.     set-mark
  61.     end-of-file
  62.     kill-region
  63.     insert-string "Suggested Replacements:~n"
  64.     insert-file suggest.tmp
  65.     beginning-of-file
  66.     next-line
  67.     !if &seq $line "EXACT MATCH"
  68.         set %exact TRUE
  69.         !return
  70.     !endif
  71.     set %exact FALSE
  72.     19 forward-character
  73.     !if &equ $curchar 32
  74. ;        no replacements!
  75.         beginning-of-line
  76.         overwrite-string "    None Found"
  77.         set %currep 0
  78.     !else
  79. ;        mark first replacement as current default
  80.         forward-character
  81.         set %currep 1
  82.         overwrite-string "<="
  83.     !endif
  84.     3 next-window
  85. !endm
  86.  
  87. store-procedure update-responses
  88.     2 next-window
  89.     set $curline &add &mod &sub %currep 1 4 2
  90.     set $curcol &sub × &div &add %currep 3 4 21 1
  91.     overwrite-string "  "
  92.     set $curline &add &mod &sub %newrep 1 4 2
  93.     set $curcol &sub × &div &add %newrep 3 4 21 2
  94.     !if &equ $curchar 32
  95.         set %resempty TRUE
  96.     !else
  97.         set %resempty FALSE
  98.     !endif
  99.     forward-character
  100.     overwrite-string "<="
  101.     set %currep %newrep
  102.     3 next-window
  103. !endm
  104.  
  105. store-procedure doopt
  106. ;Macro for asking and resolving options
  107.  
  108. *begopt
  109.     ;grab the word
  110.     0 delete-next-word
  111.     yank
  112.     set %word $kill
  113. !force    previous-word
  114.  
  115.     ; save the casing info about this word
  116.     set %firstchar &left $kill 1
  117.     !if &seq %firstchar &upper %firstchar
  118.         set %upword TRUE
  119.     !else
  120.         set %upword FALSE
  121.     !endif
  122.  
  123.     ;dump gratuitous 's and trailing ' after an s
  124.     !if &gre &len %word 1
  125.  
  126.         ;trailing 's?
  127.         !if &seq &mid %word &sub &len %word 1 2 "'s"
  128.             set %word &mid %word 1 &sub &len %word 2
  129.         !endif
  130.  
  131.         ;trailing s'
  132.         !if &seq &mid %word &sub &len %word 1 2 "s'"
  133.             set %word &mid %word 1 &sub &len %word 1
  134.         !endif
  135.  
  136.     !endif
  137.  
  138.     ;next check to see if this should be ignored....
  139.     select-buffer "[ignore]
  140.     beginning-of-file
  141. !force    search-forward &cat &cat "~n" %word "~n"
  142.     set %sstatus $status
  143.     select-buffer %cbuffer
  144.     !if &seq %sstatus TRUE
  145.         !return
  146.     !endif
  147.  
  148.     ;see if this word has been replaced in the past
  149.     select-buffer "[source]
  150.     beginning-of-file
  151. !force    search-forward &cat &cat "~n" %word "~n"
  152.     set %sstatus $status
  153.  
  154.     !if &seq %sstatus TRUE
  155.         set %repline &sub $curline 2
  156.         select-buffer "[replace]"
  157.         set $curline %repline
  158.         set %defrep #"[replace]"
  159.         select-buffer %cbuffer
  160.         set %defflag "*"
  161.         ;check to see if this is a global replacement
  162.         !if &equ &asc %defrep 19
  163.             set %defrep &mid %defrep 2 255
  164.             !goto globalrep
  165.         !endif
  166.     !else
  167.         select-buffer %cbuffer
  168.         set %defrep ""
  169.         set %defflag ""
  170.     !endif
  171.  
  172. *askopt
  173.     run upstat    ;update the dialog window
  174.     get-suggestions
  175.     !if &seq %exact TRUE
  176.         3 next-window
  177.         !return
  178.     !endif
  179.     update-word
  180.  
  181.     set $curline 6
  182.     15 delete-next-character
  183.     insert-string "       Option: "
  184.     beginning-of-file
  185.     3 next-window
  186.  
  187. *iopt
  188.     update-screen
  189.     set %resp >cmd
  190.  
  191.     !if &seq &left %resp 2 "FN"
  192.         !if &equ %currep 0
  193.             !goto iopt
  194.         !endif
  195.         set %newrep "none"
  196.         set %ckey &mid %resp 3 1
  197. *resagain
  198.         !if &seq %ckey "P"
  199.             set %newrep &sub %currep 1
  200.             !if &equ %newrep 0
  201.                 set %newrep 12
  202.             !endif
  203.         !endif
  204.         !if &seq %ckey "N"
  205.             set %newrep &add %currep 1
  206.             !if &equ %newrep 13
  207.                 set %newrep 1
  208.             !endif
  209.         !endif
  210.         !if &seq %ckey "B"
  211.             !if &equ %currep 1
  212.                 set %newrep 12
  213.             !else
  214.                 !if &less %currep 5
  215.                     set %newrep &add %currep 7
  216.                 !else
  217.                     set %newrep &sub %currep 4
  218.                 !endif
  219.             !endif
  220.         !endif
  221.         !if &seq %ckey "F"
  222.             !if &equ %currep 12
  223.                 set %newrep 1
  224.             !else
  225.                 !if &gre %currep 8
  226.                     set %newrep &sub %currep 7
  227.                 !else
  228.                     set %newrep &add %currep 4
  229.                 !endif
  230.             !endif
  231.         !endif
  232.         !if ¬ &seq %newrep "none"
  233.             update-responses
  234.             !if &seq %resempty TRUE
  235.                 !goto resagain
  236.             !endif
  237.         !endif
  238.         !goto iopt
  239.     !endif
  240.  
  241.     !if &seq %resp "MSa"
  242.         set %junk >cmd    ;dump the upclick
  243.         mouse-move-down
  244.         !if &seq $cbufname "Dialog Window"
  245.             forward-character
  246.             !force search-reverse "("
  247.             !if &seq $status FALSE
  248.                 3 next-window
  249.                 !goto iopt
  250.             !endif
  251.             forward-character
  252.             set %resp &chr $curchar
  253.             3 next-window
  254.         !else
  255.             !if &seq $cbufname "[suggestions]"
  256.                 !if ¬ &equ $curline 1
  257.                     previous-word
  258.                     set-mark
  259.                     end-of-word
  260.                     copy-region
  261.                     set %repstring $kill
  262.                     3 next-window
  263.                     set-mark
  264.                     end-of-word
  265.                     kill-region
  266.                     insert-string %repstring
  267.                     update-screen
  268.                     set %offset &add &sub %offset &len %word &len %repstring
  269.                     !return
  270.                 !endif
  271.             !else
  272.                 !goto iopt
  273.             !endif
  274.         !endif
  275.     !endif
  276.  
  277.     !if &seq &left %resp 2 "MS"
  278.         !goto iopt
  279.     !endif
  280.  
  281.     1 next-window
  282.     set $curline 6
  283.     15 delete-next-character
  284.     15 insert-space
  285.     3 next-window
  286. ;    update-screen
  287.  
  288.     ;no case problems!
  289.     set %resp &low %resp
  290.  
  291.     !if &seq %resp "^m"
  292.  
  293.         ; fetch the string to replace the suspect word with
  294.         2 next-window
  295.         previous-word
  296.         set-mark
  297.         end-of-word
  298.         copy-region
  299.         set %repstring $kill
  300.  
  301.         ; delete the syspect word
  302.         3 next-window
  303.         set-mark
  304.         end-of-word
  305.         kill-region
  306.  
  307.         ; adjust the case of the replacement word if needed
  308.         !if &seq %upword TRUE
  309.             set %repstring &cat &upper &left %repstring 1 &mid %repstring 2 255
  310.         !endif
  311.  
  312.         ; insert the replacement word
  313.         insert-string %repstring
  314.         update-screen
  315.         set %offset &add &sub %offset &len %word &len %repstring
  316.         !return
  317.     !endif
  318.  
  319.     ;skip just this occurence....
  320.     !if &seq %resp "s"
  321.         !return
  322.     !endif
  323.  
  324.     ;Ignore this mismatch and all like it
  325.     !if &seq %resp "i"
  326.         select-buffer "[ignore]"
  327.         end-of-file
  328.         insert-string %word
  329.         select-buffer %cbuffer
  330.         !return
  331.     !endif
  332.  
  333.     ;Replace this string with the default string
  334.     !if &seq %resp "d"
  335. *globalrep
  336.         0 delete-next-word
  337.         insert-string %defrep
  338.         update-screen
  339.         set %offset &add &sub %offset &len %word &len %repstring
  340.         !return
  341.     !endif
  342.  
  343.     ;Replace this string with another.....
  344.     !if &or &seq %resp "c" &seq %resp "g"
  345.         set $discmd TRUE
  346.         set %repstring ""
  347.         !if &seq %resp "g"
  348.             set %repstring "Globally "
  349.         !endif
  350.         !if &seq %defflag ""
  351.             set %repstring @&cat %repstring "Replace with: "
  352.         !else
  353.             set %repstring @&cat &cat &cat %repstring "Replace with[" %defrep "]: "
  354.             !if &seq %repstring ""
  355.                 set %repstring %defrep
  356.             !endif
  357.         !endif
  358.         set $discmd FALSE
  359.         0 delete-next-word
  360.         insert-string %repstring
  361.         update-screen
  362.         previous-word
  363.         set %offset &add &sub %offset &len %word &len %repstring
  364.         !if &seq %defflag ""
  365.             select-buffer "[source]"
  366.             end-of-file
  367.             insert-string %word
  368.             select-buffer "[replace]"
  369.             end-of-file
  370.             ;if it is a global replace, add this marker
  371.             !if &seq %resp "g"
  372.                 insert-string &chr 19
  373.             !endif
  374.             insert-string %repstring
  375.             select-buffer %cbuffer
  376.         !endif
  377.         !goto begopt
  378.     !endif
  379.  
  380.     ;if we are adding this word and it is not to upper case,
  381.     ;...lower case it
  382.     !if &seq %resp "a"
  383.         set %resp "u"
  384.         set %word &lower %word
  385.     !endif
  386.  
  387.     ;Add this word to a user dictionary and ignore it
  388.     !if &seq %resp "u"
  389.         select-buffer "[ignore]"
  390.         end-of-file
  391.         insert-string %word
  392.         select-buffer "[add]"
  393.         end-of-file
  394.         insert-string %word
  395.         select-buffer %cbuffer
  396.         set %addflag TRUE
  397.         !return
  398.     !endif
  399.  
  400.     ;Abort the spell check run
  401.     !if &or &seq %resp "" &seq %resp "q"
  402.         set %done ABORT
  403.         !return
  404.     !endif
  405.  
  406.     write-message ""
  407.     !goto askopt
  408. !endm
  409.  
  410. store-procedure update-word
  411.  
  412.     clear-message-line
  413.     1 next-window        ;skip to the dialog window
  414.     set $curline 3        ;update the current word & default
  415.     3 redraw-display
  416.     set $curcol 21
  417.     20 delete-next-character
  418.     &sub 20 &len %word insert-space
  419.     insert-string %word
  420.     set $curline 4
  421.     set $curcol 21
  422.     20 delete-next-character
  423.     &sub 20 &len %defrep insert-space
  424.     insert-string %defrep
  425. !endm
  426.  
  427. store-procedure cleanup
  428. ;    Add the requested user words to a user dictionary
  429.  
  430.     !if &seq %addflag TRUE
  431.         !if &seq %userlist ""
  432.             set $discmd TRUE
  433.             set %userlist @"User dictionary name: "
  434.             set $discmd FALSE
  435.         !endif
  436.         write-message "[Updating User Dictionary]"
  437.     !force    find-file %userlist
  438.         set %bdict $cbufname
  439.         select-buffer "[add]"
  440.         beginning-of-file
  441.         set-mark
  442.         end-of-file
  443.         kill-region
  444.         select-buffer %bdict
  445.         end-of-file
  446.         yank
  447.         delete-blank-lines
  448.         save-file
  449.     !endif
  450.  
  451.     select-buffer "[ignore]"
  452.     unmark-buffer
  453.     select-buffer "[add]"
  454.     unmark-buffer
  455.     select-buffer "[source]"
  456.     unmark-buffer
  457.     select-buffer "[replace]"
  458.     unmark-buffer
  459.     select-buffer "[suggestions]"
  460.     unmark-buffer
  461.     select-buffer "Dialog Window"
  462.     unmark-buffer
  463.  
  464.     select-buffer %cbuffer
  465.     beginning-of-file
  466.  
  467. !endm
  468.  
  469. store-procedure upstat
  470. ;    update the dialog window stats
  471.  
  472.     1 next-window
  473.     beginning-of-file
  474.     set $curcol 44
  475.     &len %cfnum delete-previous-character
  476.     insert-string %cfnum
  477.     set $curcol 48
  478.     &len %tfnum delete-previous-character
  479.     insert-string %tfnum
  480.     set $curcol 61
  481.     &len %cwnum delete-previous-character
  482.     insert-string %cwnum
  483.     set $curcol 67
  484.     &len %twnum delete-previous-character
  485.     insert-string %twnum
  486.     3 next-window
  487. !endm
  488.  
  489. ;    init for spell check run
  490.  
  491.     add-global-mode "black"
  492.     add-global-mode "WHITE"
  493.     add-mode "blue"
  494.     add-mode "WHITE"
  495.  
  496. !force    find-file "spell.lst"
  497.     !if ¬ &seq $status TRUE
  498.         write-message "[No file to scan]~n"
  499.         exit-emacs
  500.     !endif
  501.     write-message "[Preparing to Scan]"
  502.  
  503.     select-buffer "[source]"
  504.     unmark-buffer
  505.     select-buffer "[replace]"
  506.     delete-buffer "[source]"
  507.     unmark-buffer
  508.     select-buffer "[add]"
  509.     delete-buffer "[replace]"
  510.     unmark-buffer
  511.     select-buffer "[ignore]"
  512.     delete-buffer "[add]"
  513.     unmark-buffer
  514.     select-buffer "[add]"
  515.     delete-buffer "[ignore]"
  516.     select-buffer "[source]"
  517.     newline
  518.     select-buffer "[replace]"
  519.     select-buffer "[ignore]"
  520.     newline
  521.  
  522.     set $discmd FALSE
  523.     set %oldmflag $modeflag
  524.     set %oldwchars $wchars
  525.     set $wchars "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'"
  526.     set $modeflag FALSE
  527.     set %slist "spell.lst"
  528.     set %userlist ""
  529.     set %done FALSE
  530.     set %cfile ""
  531.     set %cbuffer ""
  532.     set %lastline -1
  533.     set %addflag FALSE
  534.     delete-other-windows
  535.     select-buffer "spell.lst"
  536.     beginning-of-file
  537.  
  538.     ;init data for the dialog window
  539.     set %cfnum 0
  540.     set %tfnum 0
  541. *nxtfile
  542. !force    search-forward "-1~n"
  543.     !if &seq $status TRUE
  544.         set %tfnum &add %tfnum 1
  545.         !goto nxtfile
  546.     !endif
  547.     set %cwnum 0
  548.     end-of-file
  549.     set %twnum &sub &sub &div &sub $curline 1 2 %tfnum 1
  550.     beginning-of-file
  551.  
  552.     ;set up the dialog window
  553.     1 split-current-window
  554.     5 resize-window
  555.     add-mode "red"
  556.     select-buffer "Dialog Window"
  557.     beginning-of-file
  558.     set-mark
  559.     end-of-file
  560.     kill-region
  561.     insert-string "MicroSPELL 2.0 spell scan         File #    /      Word      /     ~n"
  562.     insert-string "               File: ~n"
  563.     insert-string "       Suspect word:                        (S)kip         (C)hange word~n"
  564.     insert-string "Default Replacement:                        (I)gnore       (D)efault replace~n"
  565.     insert-string "                                            (A)dd word     (G)lobal change~n"
  566.     insert-string "                                Add word as (U)pper case   (Q)uit"
  567.     beginning-of-file
  568.     next-window
  569.     split-current-window
  570.     4 resize-window
  571.     add-mode yellow
  572.     select-buffer [suggestions]
  573.     next-window
  574.     add-mode blue
  575.     clear-message-line
  576.  
  577.     !while &seq %done FALSE
  578.         run getnext
  579.         !if &seq %done FALSE
  580.             doopt
  581.         !endif
  582.     !endwhile
  583.  
  584.     !if &seq %done "ABORT"
  585.         ;abort and discard?
  586.         !if ¬ &seq %rcspell TRUE
  587.             print "Save Modified File(Y)?"
  588.             set %resp >cmd
  589.             !if &or &seq %resp "y" &seq %resp "Y"
  590.                 print "[File Saved]           ~n"
  591.             !else
  592.                 unmark-buffer
  593.                 run cleanup
  594.                 print "[Spell check discarded]~n"
  595.                 exit-emacs
  596.             !endif
  597.         !endif
  598.  
  599.         ;edit up the spell.lst file so we could continue..
  600.         select-buffer "spell.lst"
  601.         2 previous-line
  602.         set-mark
  603.         beginning-of-file
  604.         kill-region
  605.         insert-string &cat &cat "-1~n" %cfile "~n"
  606.         save-file
  607.         select-buffer %cbuffer
  608.         run cleanup
  609.         write-message "[Spell check ABORTED]"
  610.         !if ¬ &seq %rcspell TRUE
  611.             set $discmd TRUE
  612.             save-file
  613.             set $gflags &band $gflags &bnot 2
  614.             update-screen
  615.             exit-emacs
  616.         !endif
  617.         set $modeflag %oldmflag
  618.         set $wchars %oldwchars
  619.         add-global-mode blue
  620.     !else
  621.         run cleanup
  622.         ;MACHINE DEPENDANT!!!!!!!!!!!!
  623.         !if &seq $sres ""
  624.             shell-command "rm spell.lst"
  625.             shell-command "rm suggest.tmp"
  626.         !else
  627.             shell-command "del spell.lst"
  628.             shell-command "del suggest.tmp"
  629.         !endif
  630.         set $gflags &band $gflags &bnot 2
  631.         write-message "[Spell check run complete]~n"
  632.         set $discmd TRUE
  633.         !if ¬ &seq %rcspell TRUE
  634.             print "Save Modified File(Y)?"
  635.             set %resp >cmd
  636.             !if &or &seq %resp "y" &seq %resp "Y"
  637.                 save-file
  638.                 print "[File Saved]           ~n"
  639.             !else
  640.                 unmark-buffer
  641.                 print "[Spell check discarded]~n"
  642.             !endif
  643.             exit-emacs
  644.         !endif
  645.         set $modeflag %oldmflag
  646.         set $wchars %oldwchars
  647.         add-global-mode blue
  648.     !endif
  649.     set $discmd TRUE
  650. !return
  651.